# 定义序列化器类
"""
获取SKUImage对象之后，sku_image具有两个属性：
    sku_image.sku: sku_image关联的sku对象
    sku_image.sku_id: sku_image所属的sku_id
"""
from rest_framework import serializers
from goods.models import SKUImage, SKU


class SKUImageSerializer(serializers.ModelSerializer):
    """SKU图片序列化器类"""
    # 关联对象嵌套序列化
    sku_id = serializers.IntegerField(label='SKU商品ID')
    sku = serializers.StringRelatedField(label='SKU商品')

    class Meta:
        model = SKUImage
        fields = ('id', 'sku', 'sku_id', 'image')

    # 新增图片数据
    # 在SKUSerializer中补充validate_sku_id方法针对前端传递的sku_id进行数据校验
    def validate_sku_id(self, value):
        try:
            sku = SKU.objects.get(id=value)
        except SKU.DoesNotExist:
            # 商品不存在
            raise serializers.ValidationError('商品不存在')

        return value

    # 校验数据完成之后,此方法会调用序列化器对象.save()进行数据保存,save内部会调用SKUImageSerializer中的create方法进行数据保存
    def create(self, validated_data):
        """重写create方法完成数据保存"""
        # ① SKUImage.objects.create(...)
        # 调用父类ModelSerializer中的create方法
        sku_image = super().create(validated_data)

        # ② 默认图片判断：是否需要设置,如果sku商品没有默认图片,则设置其默认图片
        sku = sku_image.sku
        if not sku.default_image:
            sku.default_image = sku_image.image
            sku.save()

        return sku_image


class SKUSimpleSerializer(serializers.ModelSerializer):
    """SKU商品序列化器类"""
    class Meta:
        model = SKU
        fields = ('id', 'name')
